/*
* @Author: ZL
* @Date:   $ $
* @Last Modified by:   ZL
* @Last Modified time: $ $
*/
var _base64 = new Base64(),
  sm4 = new SM4Util();
var vm = new Vue({
  el: "#login",
  data: {
    loginInfo: {
      isApp: true,
      deviceType: 'normal',
      username: '',
      password: '',
      orgId: '',
      client_auth: ''
    },
    reBackurl: '',
    baseUrl: '',
    rememberName: false,
    selOrgId: false,
    opuOmOrgList: [],
    rules: {
      username: [
        { required:true, message: '请输入用户名' },
        { min: 2, message: '用户名不能小于2个字符',trigger: 'blur' }
      ],
      password: [
        { required:true, message: '请输入密码' },
        { min:3, message: '密码不能小于3个字符',trigger: 'blur' }
      ]
    },
    hrefObj: [],
  },
  beforeMount: function(){
    var b = new this.Base64();
    this.parseURL(window.location.search);
    this.client_auth = this.hrefObj.client_auth;
    var serverUrlFlag = this.hrefObj.serverUrl=='undefined'||this.hrefObj.serverUrl==undefined || this.hrefObj.serverUrl=='null'||this.hrefObj.serverUrl==null;
    var reBackUrlFlag = this.hrefObj.reBackurl=='undefined'||this.hrefObj.reBackurl==undefined || this.hrefObj.reBackurl=='null'||this.hrefObj.reBackurl==null;
    this.baseUrl =  (!serverUrlFlag)?b.decode(this.hrefObj.serverUrl):'';
    this.reBackurl = (!reBackUrlFlag)?b.decode(this.hrefObj.reBackurl):'';
  },
  mounted: function () {
    this.getUserName('username');
  },
  methods: {
    getUserName: function(name){
      var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
      if(arr=document.cookie.match(reg)){
        this.loginInfo.username = arr[2]
      } else {
        this.loginInfo.username = ''
        return null;
      }
    },
    login: function(){
      var _that = this;
      var b = new _that.Base64();
      var sendData = JSON.parse(JSON.stringify(_that.loginInfo));
      sendData.username = sm4.encryptData_ECB(_that.loginInfo.username);
      sendData.password = sm3(hex_md5(_that.loginInfo.password));
      sendData.proPassword =   sm3(sm4.encryptData_ECB(_that.loginInfo.password));
      this.$refs['loginInfo'].validate(function(valid) {
        if (valid) {
          var url = _that.baseUrl+"/authentication/org/listOpuOmUserOrg";
          $.ajax({
            url: url,
            data: sendData,
            type:'post',
            headers:{
              "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
              "isAgAjax":true
            },
            crossDomain: true,
            success:function (data) {
              if (data != null && data != '' && data.success) {
                _that.opuOmOrgList = data.content;
                var opuOmOrgListLen = data.content.length;
                if (opuOmOrgListLen == 0) {
                  alertMsg('', "没有可管理的组织机构，联系管理员添加权限", '', 'error');
                } else if (opuOmOrgListLen == 1) {
                  //直接登录
                  _that.loginSSO(_that.opuOmOrgList[0].orgId);
                } else if (opuOmOrgListLen > 1) {
                  _that.selOrgId = true;
                }
              } else {
                _that.$message({
                  message: data.message ? data.message : '登录失败' + '，请重新登陆',
                  type: 'error'
                });
              }
            },
            error:function (msg) {
              _that.$message({
                message: msg.message?msg.message:'登录失败'+'，请重新登陆',
                type: 'error'
              });
            }
          });
        } else {
          return false;
        }
      });
    },
    loginSSO: function(orgId){
        var _that = this;
        var b = new _that.Base64();
        var sendData = JSON.parse(JSON.stringify(_that.loginInfo));
        sendData.username = sm4.encryptData_ECB(_that.loginInfo.username);
        sendData.password = sm3(hex_md5(_that.loginInfo.password));
        sendData.proPassword =   sm3(sm4.encryptData_ECB(_that.loginInfo.password));
      if(_that.rememberName){
        document.cookie='username ='+ b.decode(this.loginInfo.username);
      }
      // sendData.orgId = b.encode(orgId);
      sendData.deviceType = b.encode('pc');
      $.ajax({
        url: _that.baseUrl+'/authentication/form',
        data: sendData,
        type:'post',
        headers:{
          "Authorization": 'Basic '+ _that.client_auth,
          "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
          "isAgAjax":true
        },
        //加上这句话
        xhrFields: {
          withCredentials: true
        },
        crossDomain: true,
        success:function (data) {
          localStorage.setItem("access_token",data.content.access_token);
          window.location.href = _that.reBackurl;
        },
        error:function (error) {
          _that.$message({
            message: error.message?error.message:'登录失败'+'，请重新登陆',
            type: 'error'
          });
        }
      });
    },
    parseURL:function (url){
      var url = url.split("?")[1];
      var para = url.split("&");
      var len = para.length;
      var res = {};
      var arr = [];
      
      for(var i=0;i<len;i++){
        arr = para[i].split("=");
        arr2 = para[i].split(arr[0]);
        res[arr[0]] = arr2[1].substr(1);
      }
      this.hrefObj = res;
      return this.hrefObj;
    },
    Base64:function () {
  
  // private property
  _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  
  // public method for encoding
  this.encode = function (input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    input = _utf8_encode(input);
    while (i < input.length) {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);
      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;
      if (isNaN(chr2)) {
        enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
        enc4 = 64;
      }
      output = output +
        _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
        _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
    }
    return output;
  }
  
  // public method for decoding
  this.decode = function (input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    while (i < input.length) {
      enc1 = _keyStr.indexOf(input.charAt(i++));
      enc2 = _keyStr.indexOf(input.charAt(i++));
      enc3 = _keyStr.indexOf(input.charAt(i++));
      enc4 = _keyStr.indexOf(input.charAt(i++));
      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;
      output = output + String.fromCharCode(chr1);
      if (enc3 != 64) {
        output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
        output = output + String.fromCharCode(chr3);
      }
    }
    output = _utf8_decode(output);
    return output;
  }
  
  // private method for UTF-8 encoding
  _utf8_encode = function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";
    for (var n = 0; n < string.length; n++) {
      var c = string.charCodeAt(n);
      if (c < 128) {
        utftext += String.fromCharCode(c);
      } else if((c > 127) && (c < 2048)) {
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128);
      } else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128);
      }
      
    }
    return utftext;
  }
  
  // private method for UTF-8 decoding
  _utf8_decode = function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;
    while ( i < utftext.length ) {
      c = utftext.charCodeAt(i);
      if (c < 128) {
        string += String.fromCharCode(c);
        i++;
      } else if((c > 191) && (c < 224)) {
        c2 = utftext.charCodeAt(i+1);
        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
        i += 2;
      } else {
        c2 = utftext.charCodeAt(i+1);
        c3 = utftext.charCodeAt(i+2);
        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
        i += 3;
      }
    }
    return string;
  }
}
  },
});

